UNIT Mouse; 

interface
type
TMouse=object
	
	procedure reset;
	procedure show;
	procedure hide;
	procedure getXY(var x, y :Integer);
	function getStatus:Byte;
	function  clicked(var plicki, plick:integer):Boolean;
		
END;

IMPLEMENTATION
{
		Reset mouse
	}
	procedure TMouse.reset;
	BEGIN
		ASM
		MOV AX,00
		INT 33H
		END;
	END;
	
	{
		Mostrar puntero
	}
	procedure TMouse.show;
	BEGIN
		ASM
		MOV AX,01 
		INT 33H
		END;
	END;
	
	{
		Esconder el puntero
	}
	procedure TMouse.hide;
	BEGIN
		ASM
		MOV AX,02
		INT 33H
		END;
	END;
	
	{
		getMouse()
		Obtener la coordenada actual del mouse		
	}
	procedure TMouse.getXY(var x, y :Integer);
	VAR
		tempx,tempy:Integer;
	BEGIN
		ASM
		MOV AX,03
		INT 33H
		MOV [tempy],DX
		MOV [tempx],CX
		END;
		x:=tempx;
		y:=tempy;
	END;
	
	
	{
		getMouseStatus()
		1 si hay click izquierdo
		0 si no hay click izquierdo
		2 si hay click derecho
		Con cada llamada se actualiza plicl
	}
	function TMouse.getStatus:Byte;
	VAR
		temp:integer;
	BEGIN
	
		ASM
		MOV AX,03H
		INT 33H
		{CMP AX,1B}
		MOV [temp],BX
		
		END;
		getStatus:=temp;

		
	END;
	
	{si hay un cambio de status de 0 a 1}
	function TMouse.clicked(var plicki, plick:integer):Boolean;
	BEGIN
		
	{Si el status anterior era 0}
		IF plicki=0 THEN
		BEGIN
		    {el status actual es 1}
			IF getStatus=1 THEN
				BEGIN
				clicked:= true;
			
				Exit;
			END ELSE 
			BEGIN 
				clicked:= false;
				Exit;
			END;
			
		END;
		clicked:= false;
		Exit;
	END;
		
END.